package com.tedu.api;


import org.junit.Test;

/**
 * Java万物皆对象--> 真的是面向对象么--->不全是【八大基本数据类型】
 * 对象【类---创建对象，调用属性、方法】
 * 8个基础数据类型---本质类型---类---包装类【对象，通过点调用方法、属性】
 * 包装类不可以被修改：final 修饰类，无法继承
 * 8个包装类的方法基本通用
 *
 *     数据类型          包装类                包          父类
 *     int             Integer           java.long   继承Number
 *     long            Long              java.long   继承Number
 *     double          Double            java.long   继承Number
 *     short           Short             java.long   继承Number
 *    float            Float             java.long   继承Number
 *    byte             Byte              java.long   继承Number
 *    char             Character         java.long   继承Object
 *    boolean          Boolean           java.long   继承Object
 *
 *
 */
public class Packing {
    @Test
    public void test(){
        int i=1;   //  不是面向对象
        Integer a=new Integer(i);  //面向对象
        a.toString();

    }
    /**
     * 包装类API
     * 抽象类  Number 父类：Integer、lang、Double 、Short 、Float 、Byte
     * xxxValue抽象方法：把基本数据类型转换成包装类的方法
     * intValue方法    返回int变量
     * longValue方法   返回long变量
     * doubleValue方法  返回double变量
     * shortValue方法   返回short变量
     * floatValue方法   返回float变量
     * byteValue方法    返回byte变量
     * 需求：把以上的6个数据类型，转换包装类，输出基本数据类型
     */
    @Test
    public void testValue(){
        //int打包---包装类--取出---从包装类获取基础数据类型
        Integer i=new Integer("123");
        int is=i.intValue();//包装类   类型转换为int返回

        Integer t=new Integer("123");
        int si=t.intValue();

        System.out.println("Integer包装类:"+(is==si));
        //==   对比  值
        System.out.println("Integer包装类:"+i.equals(t));
        //.equals  对比对象   确定对象是否有值【包装类--实际值】 有实际值  对比
        //其他5个基础数据类型包装类---打包 拆包


    }


    /**
     * xxxValue抽象方法----------6个基础数据类型的包装类
     *                          包装类，valueOf("对应类型")
     *                          静态方法【打包、拆包】
     * 打包：对应包装类中存对应的类型
     * 拆包：对应包装类，类型，取出
     */
    @Test
    public void testValueOf(){

        int i=Integer.valueOf("123"); //类名点出来：静态方法【Number抽象类具体实现】

        double d=Double.valueOf("123.123");

        boolean b=Boolean.valueOf("true");

        char c=Character.valueOf('i');

        byte b1=Byte.valueOf("78");

        float f=Float.valueOf("");
    }

   /**
    * parseXXX  静态方法【重点：Servlet JavaWeb】
    * 作用：将字符串转换为对应的类型：
    * 参数--字符串--给字符串转换为对应数据类型
    * 注意：字符串随便写，不可以随便解析成对应类型
    */
    @Test
    public void testParseXXX(){

        //1.把基本数据类型转换为字符串方法  2 转换为字符串

        String s=String.valueOf("2");

        //2.把字符串转换为基础数据类型方法  需要解析出来

        String s2="2x";

        System.out.println(s2+"打桩");

        //       int i=Integer.parseInt(s2);

        //需求：把s3--s6，正确解析出来

        String s3="123.123";

        float f=Float.parseFloat(s3);

        System.out.println(f);



        String s4="true";

        boolean b=Boolean.parseBoolean(s4);
        System.out.println(b);

        String s5="10L";  //无法加L表示Long! 符合三种类型：Integer、Byte、Short
        //  long l=Long.parseLong(s5);

        String s6="a";
      /* byte b1=Byte.parseByte(s6);
       System.out.println(b1);*/
        //总结：1.字符类，无法正确解析成对应类型，不存在char字符
        //     2.字面量L/F,认为这是一个字符串，解析失败
    }


    /**
     * 包装类  自动拆装箱
     * JDK1.5  新特性 2004
     * JDK1.5之前没有自动拆装箱
     */


    @Test
    public void test01(){
        //JDK1.5
        Integer in =Integer.valueOf("1");    //输入类型转换为Integer
        int i=in.intValue();      //把包装好的类型，基本数据类型取出

        //JDK1.5之后
        Integer it=1;   //装修

        int is=it;     //拆箱
        //自动拆装箱实际上，把拆箱与装箱的步骤交给idea执行


    }





}
